/**
 * definitions.h is part of cbs-framework.
 *
 * cbs-framework is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * cbs-framework is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with cbs-framework.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef DEFINITIONS_H
#define DEFINITIONS_H

#include <set>
#include <map>
#include <limits>
#include <string>

// Forward declarations
class Constraint;
class TaskConstraint;
class ResourceConstraint;
class Task;
class Resource;

// typedefs.
typedef std::set< Constraint * >            tConstraints;           // Set of constraints.
typedef std::set< TaskConstraint * >        tTaskConstraints;       // Set of task constraints.
typedef std::set< ResourceConstraint * >    tResourceConstraints;   // Set of resource constraints.
typedef std::set< Task * >                  tTasks;                 // Set of tasks.
typedef std::set< Resource *>               tResources;             // Set of resources.

typedef unsigned short tTime;               // for time variables.
typedef unsigned short tCapacity;           // Resource's capacity.
typedef unsigned short tNeededResources;    // Resources needed by a tasks.

typedef void ( * tCallback ) ( void *, void * );    // callbacks.

// constants.
const tTime MAX_TIME = std::numeric_limits< tTime >::max();
const tTime MIN_TIME = std::numeric_limits< tTime >::min();

#endif // DEFINITIONS_H
